Spring Framework এ Caching (ক্যাশিং) হলো একটি গুরুত্বপূর্ণ বৈশিষ্ট্য যা ডাটা রিট্রিভাল প্রক্রিয়াকে দ্রুত এবং কার্যকরী করে তোলে। ক্যাশিংয়ের মাধ্যমে বারবার একই রকম ডেটা রিকোয়েস্ট করার বদলে, পূর্ববর্তী রিকোয়েস্টের ফলাফল ক্যাশে সংরক্ষিত থাকে এবং ভবিষ্যতে ঐ ডেটা দ্রুত পাওয়া যায়। Spring Boot এ ক্যাশিং বাস্তবায়ন করার জন্য @EnableCaching এবং @Cacheable অ্যানোটেশন দুটি ব্যবহৃত হয়।
@EnableCaching
@EnableCaching অ্যানোটেশন Spring Boot অ্যাপ্লিকেশনকে ক্যাশিং সমর্থন করার জন্য কনফিগার করে। এটি Spring কনটেইনারে ক্যাশিং কার্যকলাপ শুরু করার জন্য ব্যবহৃত হয় এবং ক্যাশিং এনেবেল করার জন্য এটি মেইন অ্যাপ্লিকেশন ক্লাসে যোগ করা হয়।
@Cacheable
@Cacheable অ্যানোটেশন একটি মেথডের উপরে ব্যবহৃত হয় এবং নির্দেশ করে যে এই মেথডটি ক্যাশে সংরক্ষিত হতে পারে। এটি নির্দিষ্ট ডাটা ফেরত দেওয়ার আগে প্রথমবার মেথডটি রান করে এবং পরবর্তীতে ঐ ডাটা ক্যাশে থেকে রিটার্ন করে, যাতে পুনরায় একই রিকোয়েস্ট করার সময় মেথডটি আবার রান না করতে হয়।
@EnableCaching এর ব্যবহার
@EnableCaching একটি কনফিগারেশন অ্যানোটেশন, যা Spring অ্যাপ্লিকেশন কনটেইনারে ক্যাশিংয়ের সমর্থন সক্রিয় করে। এটি সাধারণত অ্যাপ্লিকেশনের মূল ক্লাসে (যেমন, @SpringBootApplication ক্লাস) ব্যবহার করা হয়।
উদাহরণ:
@SpringBootApplication
@EnableCaching
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}
এই কনফিগারেশনটি ক্যাশিং কার্যকলাপকে সক্রিয় করে এবং Spring Boot অ্যাপ্লিকেশনকে ক্যাশিংয়ের জন্য প্রস্তুত করে।
@Cacheable এর ব্যবহার
@Cacheable অ্যানোটেশনটি ব্যবহার করে আপনি নির্দিষ্ট মেথডে ক্যাশিং প্রয়োগ করতে পারেন। যখন একটি মেথডের জন্য একই ইনপুট মান থাকে, তখন এই মেথডটি প্রথমবার ক্যাশে ফলাফল সংরক্ষণ করবে এবং পরবর্তীতে ঐ একই ইনপুট আসলে ক্যাশ থেকে ফলাফল ফেরত দেবে।
উদাহরণ:
ধরা যাক, একটি সিম্পল সেবা রয়েছে যা ব্যবহারকারীদের তথ্য রিটার্ন করবে। আমরা এখানে @Cacheable ব্যবহার করব যাতে একবার ব্যবহারকারীর তথ্য লোড হলে পরবর্তীতে সেই তথ্য ক্যাশে রাখা হয় এবং পুনরায় লোড করতে না হয়।
@Service
public class UserService {
@Cacheable("users") // "users" ক্যাশ নামের মধ্যে ফলাফল সংরক্ষণ হবে
public User getUserById(Long id) {
simulateSlowService(); // ধরা যাক এখানে একটি ধীর কাজ হচ্ছে (যেমন ডাটাবেস থেকে রেকর্ড আনা)
return new User(id, "User Name");
}
private void simulateSlowService() {
try {
Thread.sleep(3000L); // 3 সেকেন্ডের বিলম্ব তৈরি করার জন্য
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
এখানে @Cacheable("users") অ্যানোটেশন ব্যবহার করা হয়েছে। এর মানে হল যে getUserById() মেথডটি যখন প্রথমবার কোনো ইউজার আইডি দিয়ে কল করা হবে, তখন এই মেথডটি তিন সেকেন্ড সময় নিবে এবং তারপর রিটার্ন করা ডেটা ক্যাশে সংরক্ষিত হবে। পরবর্তী সময়ে যদি একই ইউজার আইডি দিয়ে কল করা হয়, তবে এটি ক্যাশ থেকে সরাসরি রিটার্ন হবে এবং আবার সেই স্লো সার্ভিস কল করা হবে না।
কনফিগারেশন
Spring Boot অ্যাপ্লিকেশন ডিফল্টভাবে SimpleMapCacheManager ব্যবহার করে ক্যাশিং পরিচালনা করে, যা মেমরি-ভিত্তিক ক্যাশ ব্যবহারের জন্য ব্যবহৃত হয়। তবে, আপনি চাইলে অন্যান্য ক্যাশ ম্যানেজার যেমন EhCache, Redis, Hazelcast ইত্যাদিও ব্যবহার করতে পারেন।
যদি Redis ক্যাশিং ব্যবহার করতে চান, তবে আপনার পম.xml ফাইলে Redis ডিপেনডেন্সি যুক্ত করতে হবে:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
এছাড়া, application.properties ফাইলে Redis এর কনফিগারেশন করতে হবে:
spring.cache.type=redis
spring.redis.host=localhost
spring.redis.port=6379
এখন, Spring Redis ক্যাশ ব্যবহার করবে এবং ডাটা Redis সিস্টেমে সংরক্ষণ করবে।
@CachePut এবং @CacheEvict
Spring Security আরও দুটি গুরুত্বপূর্ণ ক্যাশ অ্যানোটেশন সরবরাহ করে: @CachePut এবং @CacheEvict।
@CachePut: এটি ক্যাশের মধ্যে মান আপডেট করার জন্য ব্যবহৃত হয়। এই অ্যানোটেশনটি মেথডে ব্যবহার করা হলে, ক্যাশে নতুন মান আপডেট হয়।
উদাহরণ:
@CachePut(value = "users", key = "#user.id") public User updateUser(User user) { return userRepository.save(user); }@CacheEvict: এটি ক্যাশ থেকে মান মুছে ফেলার জন্য ব্যবহৃত হয়। এটি ক্যাশ ক্লিন করার জন্য ব্যবহৃত হয়, উদাহরণস্বরূপ, যখন একটি ইউজার ডিলিট হয়।
উদাহরণ:
@CacheEvict(value = "users", key = "#user.id") public void deleteUser(User user) { userRepository.delete(user); }
সারাংশ
Spring Boot এ ক্যাশিং ব্যবহারের জন্য @EnableCaching এবং @Cacheable অ্যানোটেশন খুবই গুরুত্বপূর্ণ। @EnableCaching Spring Boot অ্যাপ্লিকেশনকে ক্যাশিংয়ের জন্য প্রস্তুত করে এবং @Cacheable ব্যবহারকারীর রিকোয়েস্ট অনুযায়ী ক্যাশে ডেটা সংরক্ষণ করে, যাতে পরবর্তীতে একই রিকোয়েস্টের জন্য ডেটা পুনরায় রিটার্ন করা হয়। ক্যাশিংয়ের মাধ্যমে অ্যাপ্লিকেশনের পারফরম্যান্স বৃদ্ধি পায় এবং সিস্টেমে লোড কমে যায়।
Read more